package controle.service;

import java.io.Serializable;
import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.text.DateFormat;

import java.text.ParseException;

import java.util.ArrayList;


public class ProduitService implements Serializable //程序序列化主要解决就是完成如何将JVM中的对象保存起来，当需要这个对象的时候，再把它读入内存。为了实现这个功能，便有这个序列化的方法。
//序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中，先将对象的公共字段和私有字段以及类的名称（包括类所在的程序集）转换为字节流，然后再把字节流写入数据流。在随后对对象进行反序列化时，将创建出与原对象完全相同的副本。

{
	



		static ConnectionBDService conn = new ConnectionBDService(); 
		private static final long serialVersionUID = 1L;

		private String produitNom; 
		private float prix; 
		private String client;
		private int id_produit; 
		private int nombreProduit;
		private static ArrayList<ProduitService> produitlist = new ArrayList<ProduitService>();

		public static int createproduit(String []produitArray)
		{

			int result = 0;

			if(produitArray.length != 5){

				return result;

			}

			String sql = "Entrez les valeurs du produit(*,*,*,*,*,)";

			PreparedStatement mettreProduit = conn.getPreparedStatement(sql);

			try {

				for(int i = 0; i < 5; i++){

					mettreProduit.setString(i+1, produitArray[i]);

				}

				result = mettreProduit.executeUpdate();

			} catch (SQLException e) {


				e.printStackTrace();

			}

			conn.closeConn();

			return result;

		}

		



		public int updateProduit(String [] produitArray)
		{

			int result = 0;

			if( produitArray.length != 5){

				return result;

			}

			try{

			String sql = "select * from produit where id_produit='"+ produitArray[0]+"'";

			ResultSet rs = conn.getResultSet(sql);

				if(rs.next()){

					for(int i = 1; i < 5; i++){

						rs.updateString(i+1, produitArray[i]);

					}

				}

				rs.updateRow();

			} catch (SQLException e) {

				e.printStackTrace();

			}

			result = 1;

			conn.closeConn();

			return result;

		}



		public int suprimerProduit(String id_produit) throws SQLException
		{

			int result = 0;

			String sql = "delete from produit where id_produit='"+id_produit+"'";

			Statement stmt = (Statement) conn.getConn().createStatement();

			result = stmt.executeUpdate(sql);

			conn.closeConn();

		    return result;

		}



		public static String[][] getProduit() throws SQLException
		{

			String [][]detail = new String[0][5];

			String sqlCount = "select count(*) from produit";

			String sql = "select * from produit";

			Statement stmt = conn.getConn().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

			ResultSet rs = stmt.executeQuery(sqlCount);

			int count = 0;

			if(rs.next()){

				count = rs.getInt(1);

			}

			detail = new String[count][5];

			rs = stmt.executeQuery(sql);

			int i = 0;

			while(rs.next()){

				for(int j = 0; j < 5; j++){

					detail[i][j] = rs.getString(j+1);

				}

				detail[i][2] = detail[i][2].substring(0, detail[i][2].indexOf("."));

				detail[i][3] = detail[i][3].substring(0, detail[i][3].indexOf("."));

				i++;

			}

			conn.closeConn();

			return detail;

			

		}



		public String[][] chercheProduit(String sqlCount,String sql) throws SQLException
		{

			String [][]detail = new String[0][5];

			Statement stmt = conn.getConn().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

			ResultSet rs = stmt.executeQuery(sqlCount);

			int count = 0;

			if(rs.next()){

				count = rs.getInt(1);

			}

			detail = new String[count][5];

			rs = stmt.executeQuery(sql);

			int i = 0;

			while(rs.next()){

				for(int j = 0; j < 5; j++){

					detail[i][j] = rs.getString(j+1);

				}

				detail[i][2] = detail[i][2].substring(0, detail[i][2].indexOf("."));

				detail[i][3] = detail[i][3].substring(0, detail[i][3].indexOf("."));

				i++;

			}

			conn.closeConn();

			return detail;

		}


		

		

		public static int chercheDateHeure(String dateStr)
		{

			int result = 0;

			DateFormat dateFormat = DateFormat.getDateInstance();

			DateFormat dateHeureFormat = DateFormat.getDateTimeInstance();

			try {

				if(dateStr.length()<5){

					dateFormat.parse(dateStr);

				}else{

					dateHeureFormat.parse(dateStr);

				}

				result = 1;

			} catch (ParseException e) {

				result = 0;

			}

			conn.closeConn();

	       return result;

		}


		

		public int getNombreProduit() 
		{
			return nombreProduit;
		}

		public void setNombreProduit(int nombreProduit) 
		{

			
			this.nombreProduit = nombreProduit;
		}
		
		public String getProduitNom() {

			return produitNom;

		}

		public void setProduitNom(String nom) {

			this.produitNom = nom;

		}

		public float getPrix() {

			return prix;

		}

		public void setPrix(float prix)
		{

			this.prix = prix;

		}

		public int getId_produit() {

			return id_produit;

		}

		public void setId_produit(int id) {

			this.id_produit = id;

		}
		
		
		public String getClient() 
		{
			return client;
		}
		
		 public void setClient(String client)
		    {
		    	this.client = client;
		    }



	  public  ArrayList<ProduitService> getMarchandisesSimples() //throws chercheProduit
	  {

			try {

				String sql = "select prix,produitNom from produit";

				ResultSet rs = conn.getResultSet(sql);

				while(rs.next()) {

					//chercherProduit single = new chercherProduit();

					ProduitService chercheProduit = new ProduitService();
					chercheProduit.setProduitNom(rs.getString("produitNom"));

					chercheProduit.setPrix(rs.getFloat("prix"));

					chercheProduit.setId_produit(1);

					 produitlist.add(chercheProduit);

				}

			} catch (SQLException e) {

				System.out.println("les informations de produit pas réussit d'ajouter");

			}

			return  produitlist;



	  }






	}


